// 导入 PageHeader 组件
import PageHeader from '@/components/PageHeader'
// 导入 UploadExcel 组件
import UploadExcel from '@/components/UploadExcel'
// 导入 ImageUpload 组件
import ImageUpload from '@/components/ImageUpload'
// 导入 ScreenFull 全屏组件
import ScreenFull from '@/components/ScreenFull'
// 导入 ThemePicker 选颜色组件
import ThemePicker from '@/components/ThemePicker'
// 导入 Lang 语言切换组件
import Lang from '@/components/Lang'
// 导入指令对象
import { imgerror } from '@/directives'

import store from '@/store'
/* 自定义插件模块 */
export default {
  install (Vue) {
    // Vue构造函数给我们提供了
    // 在这里能对Vue扩展神马能力？
    // 1. 注册全局组件
    Vue.component(PageHeader.name, PageHeader)
    Vue.component(UploadExcel.name, UploadExcel)
    Vue.component(ImageUpload.name, ImageUpload)
    Vue.component(ScreenFull.name, ScreenFull)
    Vue.component(ThemePicker.name, ThemePicker)
    Vue.component(Lang.name, Lang)
    // 2. 自定义全局指令
    Vue.directive('imgerror', imgerror)
    // 3. 给Vue的原型添加公共方法 -> 任何一个vue文件都可以访问这个方法
    // 检测按钮的操作权
    Vue.prototype.$checkPermission = function (point) {
      return store.state.user.profile.roles.points.includes(point)
    }
    // Vue.prototype.xxx
    // 4. 添加全局过滤器(Vue3被废弃了)
    // Vue.filter()
  }
}

// Vue.use()：
// 1. 作用：注册Vue插件，增强Vue的能力的
// 2. 原理：
// A. 插件对象需要提供 install 方法
// B. Vue.use(插件对象)会自动调用 install 方法，并且把Vue构造函数传入
// 3. 在install中能干嘛？
// 能干4个事情：
// A. 注册全局组件  B. 定义全局指令  C. 给Vue的原型添加公共方法 D. 添加全局过滤器
